import vue from '@vitejs/plugin-vue';
import { resolve } from 'path';
import AutoImport from 'unplugin-auto-import/vite';
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
import Components from 'unplugin-vue-components/vite';
import { defineConfig, loadEnv, UserConfig, UserConfigExport } from 'vite';
import { viteVConsole } from 'vite-plugin-vconsole';

// https://vitejs.dev/config/

export default (config: UserConfig): UserConfigExport => {
  const mode = config.mode as string;
  const env: Record<string, any> = loadEnv(mode, process.cwd(), '');

  return defineConfig({
    base: './',
    plugins: [
      vue(),
      AutoImport({
        imports: ['vue', 'vue-router'],
        // 设置为在'src/'目录下生成解决ts报错，默认是当前目录('./'，即根目录)
        dts: resolve(__dirname, './src/auto-import.d.ts'),
        // 自动生成'eslintrc-auto-import.json'文件，在'.eslintrc.cjs'的'extends'中引入解决报错
        // 'vue-global-api'这个插件仅仅解决vue3 hook报错
        eslintrc: {
          enabled: true,
        },
      }),
      Components({
        resolvers: [
          AntDesignVueResolver({
            importStyle: false, // css in js
          }),
        ],
      }),
      viteVConsole({
        entry: resolve('src/main.ts'),
        localEnabled: mode === 'h5',
        enabled: mode === 'h5',
        config: {
          maxLogNumber: 1000,
          theme: 'dark',
        },
      }),
    ],
    resolve: {
      alias: [
        {
          find: '@',
          replacement: resolve('src'),
        },
      ],
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
    },
    build: {
      outDir: 'dist',
      sourcemap: env.VITE_BUILD_SOURCEMAP === 'true',
      // minify默认esbuild，esbuild模式下terserOptions将失效
      // vite3变化：Terser 现在是一个可选依赖，如果你使用的是 build.minify: 'terser'，你需要手动安装它 `npm add -D terser`
      minify: 'terser',
      // target: "es2015",
      terserOptions: {
        compress: {
          keep_infinity: true, // 防止 Infinity 被压缩成 1/0，这可能会导致 Chrome 上的性能问题
          drop_console: env.VITE_BUILD_DROP_CONSOLE === 'true', // 去除 console
          drop_debugger: true, // 去除 debugger
        },
      },
      chunkSizeWarningLimit: 1500, // chunk 大小警告的限制（以 kbs 为单位）
    },
    server: {
      // host: "192.168.3.58",
      // host: '172.26.5.8',
      port: 8080,
      cors: true,
      open: true,
      proxy: {
        '/api': {
          //当拦截到"/dome"时，target中的地址就会将其替换，组成真正的接口
          //真正的接口（也就是拿数据的接口）：http://xxxx.io/api/userexists?username=666666
          target: env.VITE_APP_API_BASE_URL, //http://geneplayer.io/api
          changeOrigin: true,
          rewrite: path => path.replace(/^\/api/, ''),
        },
      },
    },
  });
};
